package com.lafabrick.core
{
	/**
	 * Gestionnaire de vue
	 */
	 
	[Bindable]
	public class FabrickLocator
	{
		private static var _fbApp : FabrickLocator;
		
		private var _component : Array;
		
		/**
		 * Constructeur
		 */
		public function FabrickLocator()
		{
			if (_fbApp != null)
			{
				throw new Error( "une seule app à déclarer !" );	
			}
		}

		/**
		 * Retourne l'instance FabrickLocator
		 */
		public static function getInstance() : FabrickLocator
		{
			if (_fbApp == null)
			{
				_fbApp = new FabrickLocator( );
			}
			return _fbApp;
		}
		
		/**
		 * Inscription des composants dans la classe <br />
		 * Array Tableau contenant les composants, du type : [{id:"identifiant", classe:la classe correspondant au composant}, { ... }]
		 */
		public function set component(ar:Array) : void {
			this._component = ar;
		}
		
		/**
		 * Renvoie le tableau de composants contenu dans la classe
		 * @return Array Tableau des composants
		 */
		public function get component() : Array {
			return this._component;
		}
		
		
		/**
		 * Retourne l'identifiant du composant cible
		 * @param id:String id du composant cible
		 */
		public function getComponentById(id:String) : *
		{
			var componentLn:Number = _component.length;
			
			for (var i:Number=0; i<componentLn; i++){
				if (_component[i].id == id) {
					return _component[i].id;
				}
			}
		}
		
		/**
		 * Retourne l'identifiant du composant cible
		 * @param name:Class Classe du composant cible
		 */
		public function getComponentByClass(name:Class) : *
		{
			var componentLn:Number = _component.length;
			
			for (var i:Number=0; i<componentLn; i++){
				if (_component[i].classe == name) {
					return _component[i].id;
				}
			}
		}
	}
}